home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / CDPLAY.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-30  |  5KB  |  176 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 227 of 323
  3. From : Nicholas Kirsch                     1:355/515.0          03 Jun 93  11:55
  4. To   : Laurent Chartinier
  5. Subj : Here is some source for using CD-ROMs.
  6. ────────────────────────────────────────────────────────────────────────────────
  7. Here is some source for using CD-ROM's with Pascal, if you get TP7, it's still
  8. compatible.}
  9.  
  10. { Copyright 1993 by Michael W. Armstrong.
  11.                     2800 Skipwith Rd
  12.                     Richmond, VA 23294
  13.  
  14.   Compuserve ID 72740, 1145
  15.   This program is entered as Shareware.  If you find it useful, a small
  16.   donation would be appreciated.  Feel free to incorporate the code into
  17.   your own programs.
  18. }
  19.  
  20. {$X+}
  21. program CDPlay;
  22.  
  23. {$IfDef Windows}
  24. {$C PRELOAD}
  25. uses CD_Vars, CDUnit_P, WinCRT, WinProcs;
  26. {$Else}
  27. uses CD_Vars, CDUnit_P, CRT, Drivers;
  28. {$EndIf}
  29.  
  30. Type
  31.   TotPlayRec = Record
  32.      Frames,
  33.      Seconds,
  34.      Minutes,
  35.      Nada     : Byte;
  36.   End;
  37.  
  38. Var
  39.   GoodDisk : Boolean;
  40.   SaveExit   : Pointer;
  41.   OldMode    : Word;
  42.   CurrentTrack,
  43.   StartTrack,
  44.   EndTrack   : Integer;
  45.   TotPlay    : TotPlayRec;
  46.   TrackInfo  : Array[1..99] of PAudioTrackInfo;
  47.  
  48. function LeadingZero(w: Word): String;
  49. var s: String;
  50. begin
  51.   Str(w:0, s);
  52.   LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
  53. end;
  54.  
  55.  
  56. procedure DrawScreen;
  57. Const TStr = '%03d:%02d';
  58.       VStr = '%1d.%2d';
  59. Var   FStr : PChar;
  60.       NStr : String;
  61.       Param: Array[1..2] of LongInt;
  62.       Code : Integer;
  63. begin
  64.   WriteLn('CD ROM Audio Disk Player');
  65.   WriteLn('Copyright 1992 by M. W. ARMSTRONG');
  66.   Param[1] := MSCDEX_Version.Major;
  67.   Param[2] := MSCDEX_Version.Minor;
  68.  
  69. {$IfDef Windows}
  70.   wvsPrintf(FStr, VStr, Param);
  71. {$Else}
  72.   FormatStr(NStr, VStr, Param);
  73. {$EndIf}
  74.  
  75.   WriteLn('MSCDEX Version ', NStr);
  76.   Str(NumberOfCD, NStr);
  77.   WriteLn('Number of CD ROM Drives is: '+Nstr);
  78.   WriteLn('First CD Drive Letter is  : '+Chr(FirstCD+65));
  79.   WriteLn('There are ' + LeadingZero(EndTrack - StartTrack + 1) + ' Tracks on 
  80. this disk');
  81.   Code := 1;
  82. end;
  83. {***********************************************************************}
  84.  
  85. {***********************************************************************}
  86.  
  87.  
  88. procedure Setup;
  89. Var
  90.   LeadOut,
  91.   StartP,
  92.   TotalPlayTime    : LongInt;
  93.   I     : Integer;
  94.   A,B,C : LongInt;
  95.   Track : Byte;
  96.   EA    : Array[1..4] of Byte;
  97.   SP,EP : LongInt;
  98.  
  99. Begin
  100.   FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
  101.   DeviceStatus;
  102.   If Audio THEN
  103.   Begin
  104.     Audio_Disk_Info;
  105.     TotalPlayTime := 0;
  106.     LeadOut := AudioDiskInfo.LeadOutTrack;
  107.  
  108.     StartTrack := AudioDiskInfo.LowestTrack;
  109.     EndTrack := AudioDiskInfo.HighestTrack;
  110.     CurrentTrack := StartTrack;
  111.     I := StartTrack-1;
  112.  
  113.     Repeat               { Checks if Audio Track or Data Track }
  114.         Inc(I);
  115.         Track := I;
  116.         Audio_Track_Info(StartP, Track);
  117.     Until (Track AND 64 = 0) OR (I = EndTrack);
  118.  
  119.     StartTrack := I;
  120.  
  121.     For I := StartTrack to EndTrack DO
  122.       Begin
  123.         Track := I;
  124.         Audio_Track_Info(StartP, Track);
  125.         New(TrackInfo[I]);
  126.         FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
  127.         TrackInfo[I]^.Track := I;
  128.         TrackInfo[I]^.StartPoint := StartP;
  129.         TrackInfo[I]^.TrackControl := Track;
  130.       End;
  131.  
  132.     For I := StartTrack to EndTrack - 1 DO
  133.         TrackInfo[I]^.EndPoint := TrackInfo[I+1]^.StartPoint;
  134.     TrackInfo[EndTrack]^.EndPoint := LeadOut;
  135.  
  136.     For I := StartTrack to EndTrack DO
  137.         Move(TrackInfo[I]^.EndPoint, TrackInfo[I]^.Frames, 4);
  138.  
  139.     TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
  140.     TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
  141.  
  142.     For I := StartTrack + 1 to EndTrack DO
  143.       Begin
  144.         EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
  145.         SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
  146.         EP := EP - SP;
  147.         TrackInfo[I]^.PlayMin := EP DIV 60;
  148.         TrackInfo[I]^.PlaySec := EP Mod 60;
  149.       End;
  150.  
  151.     TotalPlayTime := AudioDiskInfo.LeadOutTrack - 
  152. TrackInfo[StartTrack]^.StartPoint;
  153.     Move(TotalPlayTime, TotPlay, 4);
  154.   End;
  155. end;
  156.  
  157. {***********************************************************************}
  158.  
  159.  
  160. Begin
  161.   Setup;
  162.   If Audio THEN
  163.   If Playing THEN
  164.      StopAudio
  165.   ELSE
  166.      Begin
  167.        StopAudio;
  168.        Play_Audio(TrackInfo[StartTrack]^.StartPoint,
  169.              TrackInfo[EndTrack]^.EndPoint);
  170.        Audio_Status_Info;
  171.        DrawScreen;
  172.      End
  173.   ELSE
  174.       WriteLn('This is not an Audio CD');
  175.   WriteLn('UPC Code is: ', UPC_Code);
  176. end.